#pragma once
#pragma warning(disable:4996)       // disable checked iterator errors http://msdn.microsoft.com/en-us/library/aa985965(VS.80).aspx 

#include "Macros.h"

#pragma unmanaged 
#include <ql\settings.hpp>
#pragma managed 

using namespace System;
using namespace QuantLib;
using namespace Cephei;
using namespace System::Xml::Serialization;
using namespace System::Xml::Schema;

namespace Cephei { namespace QL {
	//////////////////////////////////////////////////////////////////////////////////////////////
	// implementation of ICashFlow
	public ref class Settings
	{
	internal:
		static bool _ReferenceLocking = false;
	public:
		static property DateTime EvaluationDate
		{
			static void set (DateTime datetime);
			static DateTime get ();
		}

		//
		// Provide a function that can be used from F# to force the setting of the EvalationDate
		// 
		generic <typename T>
		static T With (T t, DateTime datetime)
		{
			EvaluationDate = datetime;
			return t;
		}
		static property bool IncludeReferenceDateCashFlows
		{
			static void set (bool b);
			static bool get ();
		}
		static property bool IncludeTodaysCashFlows
		{
			static void set (bool b);
			static bool get ();
		}
		static property bool EnforcesTodaysHistoricFixings
		{
			static void set (bool b);
			static bool get ();
		}
		static property bool ReferenceLocking
		{
			static void set (bool b);
			static bool get ();
		}
	};
}}